package com.zdj.copyproperties;

import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhangdj
 * @date 2019/11/20
 */
public class ObjectConverter {

    /**
     * 对象转换
     * 属性名必须相同，不同的可以自己单独处理
     *
     * @param source 原对象
     * @param clazz 目标类
     * @return 对象
     */
    public static <T, C> C convert(T source, Class<C> clazz) {
        C target = BeanUtils.instantiateClass(clazz);
        BeanUtils.copyProperties(source, target);
        return target;
    }

    /**
     * 列表转换
     * @param source 原列表
     * @param clazz 目标类
     * @param <T> 原列表存储的对象类型
     * @param <C> 要转换的列表存储的对象类型
     * @return 列表
     */
    public static <T, C> List<C> convert(List<T> source, Class<C> clazz) {
        if (CollectionUtils.isEmpty(source)) {
            return new ArrayList<>();
        }
        List<C> targetList = new ArrayList<>(source.size());
        for (T data : source) {
            C target = convert(data, clazz);
            targetList.add(target);
        }
        return targetList;
    }
}
